﻿package mortal.game.view.common.util
{
    import Message.DB.Tables.*;
    import Message.Game.*;
    import Message.Public.*;
    import __AS3__.vec.*;
    import extend.language.*;
    import flash.utils.*;
    import mortal.game.cache.*;
    import mortal.game.resource.*;
    import mortal.game.resource.info.item.*;
    import mortal.game.resource.tableConfig.*;
    import mortal.game.view.best.*;
    import mortal.game.view.common.tooltip.tooltips.equipment.*;
    import mortal.game.view.forging.data.*;
    import mortal.game.view.forging.util.*;

    public class EquipmentUtil extends Object
    {
        public static var equipBaseAttrList:Array = ["attack", "life", "mana", "physDefense", "magicDefense", "penetration", "crit", "toughness", "hit", "jouk", "expertise", "block", "damageReduce"];
        public static var equipBaseAttrNames:Array = Language.getString(20883).split(",");
        public static var StoneNames:Array = Language.getString(20884).split(",");
        public static var RunEffectField:Array = [ERuneEffectType._ERuneEffectAttriAttack, ERuneEffectType._ERuneEffectAttriLife, ERuneEffectType._ERuneEffectAttriMagic, ERuneEffectType._ERuneEffectAttriPhysicalDefense, ERuneEffectType._ERuneEffectAttriMagicDefense, ERuneEffectType._ERuneEffectAttriPenetration, ERuneEffectType._ERuneEffectAttriCrit, ERuneEffectType._ERuneEffectAttriToughness, ERuneEffectType._ERuneEffectAttriHit, ERuneEffectType._ERuneEffectAttriJouk, ERuneEffectType._ERuneEffectAttriExpertise, ERuneEffectType._ERuneEffectAttriBlock, (ERuneEffectType._ERuneEffectAttriBlock + 1)];

        public function EquipmentUtil()
        {
            return;
        }// end function

        public static function getRuneTypeNameByEffectField(param1:int) : String
        {
            var _loc_2:* = RunEffectField.indexOf(param1);
            if (_loc_2 < 0 || _loc_2 >= equipBaseAttrList.length)
            {
                return "";
            }
            return equipBaseAttrList[_loc_2];
        }// end function

        public static function getRuneEffectNameByEffectField(param1:int) : String
        {
            var _loc_2:* = RunEffectField.indexOf(param1);
            if (_loc_2 < 0 || _loc_2 >= equipBaseAttrNames.length)
            {
                return "";
            }
            return equipBaseAttrNames[_loc_2];
        }// end function

        public static function getStrengthenAddRatio(param1:ItemData) : Number
        {
            var _loc_5:int = 0;
            var _loc_6:int = 0;
            var _loc_7:Number = NaN;
            var _loc_8:Number = NaN;
            var _loc_2:* = param1.extInfo.currentStrengthen;
            var _loc_3:* = param1.extInfo.strengthen;
            var _loc_4:* = _loc_2 / ForgingConst.TotalStrengProgress;
            if (_loc_3 == 0)
            {
                _loc_5 = 0;
                _loc_6 = Cache.instance.forging.getPropAddPercentByLevel((_loc_3 + 1));
            }
            else if (_loc_3 < ForgingConst.MaxStrengLevel)
            {
                _loc_5 = Cache.instance.forging.getPropAddPercentByLevel(_loc_3);
                _loc_6 = Cache.instance.forging.getPropAddPercentByLevel((_loc_3 + 1));
            }
            else
            {
                _loc_5 = Cache.instance.forging.getPropAddPercentByLevel(_loc_3);
                _loc_6 = _loc_5;
            }
            _loc_7 = _loc_5 / 100 + (_loc_6 - _loc_5) / 100 * _loc_4;
            return _loc_7;
        }// end function

        public static function getStrengthenAttr(param1:ItemData, param2:Boolean = false, param3:ItemExInfo = null) : Vector.<AttributeData>
        {
            var _loc_7:int = 0;
            var _loc_8:int = 0;
            var _loc_9:int = 0;
            var _loc_10:TEquipStrengthenAdd = null;
            var _loc_11:String = null;
            var _loc_12:int = 0;
            var _loc_13:Array = null;
            var _loc_14:Number = NaN;
            var _loc_15:Object = null;
            var _loc_16:Number = NaN;
            var _loc_17:Number = NaN;
            var _loc_18:Number = NaN;
            var _loc_19:Number = NaN;
            var _loc_20:int = 0;
            var _loc_21:int = 0;
            var _loc_22:int = 0;
            var _loc_23:Number = NaN;
            var _loc_24:TEquipStrengthenAdd = null;
            var _loc_25:AttributeData = null;
            var _loc_4:* = new Vector.<AttributeData>;
            var _loc_5:int = 0;
            var _loc_6:int = 0;
            if (param3)
            {
                _loc_5 = param3.strengthen;
                _loc_6 = param3.currentStrengthen;
            }
            else if (param1.extInfo)
            {
                _loc_5 = param1.extInfo.strengthen;
                _loc_6 = param1.extInfo.currentStrengthen;
            }
            if (param1.extInfo || param3 != null)
            {
                _loc_7 = param1.itemInfo.career;
                _loc_8 = param1.itemInfo.type;
                if (_loc_5 < ForgingConst.MaxStrengLevel)
                {
                    _loc_9 = EquipStrengthenConfig.instance.getInfoByLevel((_loc_5 + 1)).rewardPercent;
                    _loc_10 = EquipStrenthenAddConfig.instance.getInfo(_loc_7, _loc_8, (_loc_5 + 1));
                }
                else
                {
                    _loc_9 = EquipStrengthenConfig.instance.getInfoByLevel(_loc_5).rewardPercent;
                    _loc_10 = EquipStrenthenAddConfig.instance.getInfo(_loc_7, _loc_8, _loc_5);
                }
                if (!_loc_10)
                {
                    _loc_10 = new TEquipStrengthenAdd();
                }
                _loc_13 = getEquipBaseAttr(param1);
                _loc_14 = _loc_6 / ForgingConst.TotalStrengProgress;
                for each (_loc_15 in _loc_13)
                {
                    
                    _loc_11 = _loc_15["attrName"];
                    _loc_12 = _loc_15["attrValue"];
                    _loc_16 = (_loc_12 * (_loc_9 / 10000) + _loc_10[_loc_11]) * _loc_14;
                    _loc_23 = Cache.instance.forging.getPropAddPercentByLevel(_loc_5);
                    _loc_17 = _loc_12 * (1 + _loc_23 / 10000);
                    _loc_24 = Cache.instance.forging.getFixAttrAccInfo(_loc_7, _loc_8, _loc_5);
                    _loc_18 = _loc_24[_loc_11];
                    _loc_19 = _loc_12 * param1.addPercent;
                    _loc_22 = int(_loc_16) + int(_loc_17) + int(_loc_18) + int(_loc_19);
                    _loc_22 = _loc_22 == 0 ? (_loc_12) : (_loc_22);
                    _loc_20 = _loc_12 + int(_loc_12 * param1.addPercent);
                    _loc_21 = _loc_22 - _loc_20;
                    _loc_25 = new AttributeData();
                    _loc_25.name = _loc_11;
                    if (param2)
                    {
                        _loc_25.value = _loc_22;
                    }
                    else
                    {
                        _loc_25.value = _loc_21;
                    }
                    _loc_25.baseValue = _loc_20;
                    _loc_25.attrBaseValue = _loc_12;
                    _loc_4.push(_loc_25);
                }
            }
            return _loc_4;
        }// end function

        public static function getEquipmentXiLianAttrs(param1:ItemData, param2:ItemExInfo = null) : Vector.<AttributeData>
        {
            return AttributeUtil.getEquipRefreshProp(param1, param2);
        }// end function

        public static function getEquipmentStonesData(param1:ItemData) : Array
        {
            var _loc_8:int = 0;
            var _loc_10:String = null;
            var _loc_11:ItemData = null;
            var _loc_12:ToolTipStoneData = null;
            var _loc_13:int = 0;
            var _loc_2:Array = [];
            var _loc_3:* = param1.extInfo.strengthen;
            var _loc_4:* = (11 - _loc_3) / 3;
            var _loc_5:* = (getGemHoleNum(param1) + 1) + _loc_4;
            var _loc_6:int = 0;
            var _loc_7:int = 1;
            while (_loc_7 < _loc_5)
            {
                
                _loc_10 = param1.extInfo["h" + _loc_7.toString()];
                _loc_11 = null;
                _loc_12 = new ToolTipStoneData();
                _loc_12.isLocked = _loc_7 > param1.extInfo.hole_num;
                _loc_2.push(_loc_12);
                if (_loc_10 == null || _loc_10 == "")
                {
                    _loc_12.openTips = "";
                    _loc_6++;
                }
                else
                {
                    _loc_12.openTips = "isOpened";
                    if (param1.extInfo["h" + _loc_7] && param1.extInfo["h" + _loc_7] != "0")
                    {
                        _loc_13 = param1.extInfo["h" + _loc_7].split("#")[0];
                        _loc_11 = new ItemData(_loc_13);
                    }
                    else if (int(_loc_10) > 0)
                    {
                        _loc_11 = new ItemData(int(_loc_10));
                    }
                    if (_loc_11 != null && _loc_11.itemInfo != null)
                    {
                        _loc_12.itemData = _loc_11;
                    }
                }
                _loc_7++;
            }
            _loc_6 = Math.min(_loc_4, _loc_6);
            var _loc_9:* = (4 - _loc_4) * 3;
            _loc_7 = 0;
            while (_loc_7 < _loc_6)
            {
                
                _loc_12 = _loc_2[_loc_2.length - _loc_6 + _loc_7];
                _loc_12.openTips = Language.getStringByParam(20204, _loc_9);
                _loc_9 = _loc_9 + 3;
                _loc_7++;
            }
            return _loc_2;
        }// end function

        public static function getOtherPlayerStonesData(param1:int, param2:Dictionary) : Array
        {
            var _loc_6:SJewelHoleInfo = null;
            var _loc_7:ToolTipStoneData = null;
            var _loc_8:String = null;
            var _loc_3:Array = [];
            var _loc_4:* = param2[param1];
            var _loc_5:int = 0;
            while (_loc_5 < _loc_4.length)
            {
                
                _loc_6 = _loc_4[_loc_5];
                _loc_7 = new ToolTipStoneData();
                _loc_7.itemData = _loc_6.itemCode == 0 ? (null) : (new ItemData(_loc_6.itemCode, true));
                if (_loc_7.itemData)
                {
                    _loc_7.itemData.itemInfo.itemLevel = _loc_6.strengthLevel;
                }
                _loc_7.openTips = "isOpened";
                _loc_3.push(_loc_7);
                _loc_5++;
            }
            _loc_5 = _loc_4.length;
            while (_loc_5 < 6)
            {
                
                _loc_7 = new ToolTipStoneData();
                _loc_7.isLocked = true;
                _loc_7.itemData = null;
                _loc_3.push(_loc_7);
                switch(_loc_5 + 1)
                {
                    case 1:
                    {
                        _loc_8 = Language.getStringByParam(20885, "56");
                        break;
                    }
                    case 2:
                    {
                        _loc_8 = Language.getStringByParam(20885, "56");
                        break;
                    }
                    case 3:
                    {
                        _loc_8 = Language.getStringByParam(20885, "80");
                        break;
                    }
                    case 4:
                    {
                        _loc_8 = Language.getStringByParam(20885, "100");
                        break;
                    }
                    case 5:
                    {
                        _loc_8 = Language.getStringByParam(20885, "110");
                        break;
                    }
                    case 6:
                    {
                        _loc_8 = Language.getStringByParam(20885, "120");
                        break;
                    }
                    default:
                    {
                        break;
                    }
                }
                _loc_7.openTips = _loc_8;
                _loc_5++;
            }
            return _loc_3;
        }// end function

        public static function getEquipmentStonesData2(param1:ItemData, param2:Array = null) : Array
        {
            var _loc_4:Array = null;
            var _loc_6:SJewelHoleInfo = null;
            var _loc_7:ToolTipStoneData = null;
            var _loc_8:int = 0;
            var _loc_9:String = null;
            var _loc_10:int = 0;
            var _loc_11:int = 0;
            var _loc_12:int = 0;
            var _loc_13:int = 0;
            var _loc_14:String = null;
            var _loc_3:Array = [];
            if (param2)
            {
                _loc_4 = param2;
            }
            else
            {
                _loc_4 = Cache.instance.forging.getGemDataByEquipType(param1.itemInfo.type);
            }
            var _loc_5:int = 0;
            while (_loc_5 < _loc_4.length)
            {
                
                _loc_6 = _loc_4[_loc_5];
                _loc_7 = new ToolTipStoneData();
                _loc_7.itemData = _loc_6.itemCode == 0 ? (null) : (new ItemData(_loc_6.itemCode, true));
                if (_loc_7.itemData)
                {
                    _loc_7.itemData.itemInfo.itemLevel = _loc_6.strengthLevel;
                    _loc_8 = _loc_7.itemData.itemInfo.type;
                    _loc_9 = GameDefConfig.instance.getItem("FightRoleAttribute", _loc_8).text;
                    _loc_9 = _loc_9 == "maxLife" ? ("life") : (_loc_9);
                    _loc_10 = _loc_7.itemData.itemInfo.color;
                    _loc_11 = _loc_7.itemData.itemInfo.effect;
                    _loc_12 = JewelUpdateConfig.instance.getGemAttr(_loc_10, _loc_6.strengthLevel, _loc_9);
                    _loc_13 = _loc_11 + _loc_12;
                    _loc_7.itemData.itemInfo.effectEx = _loc_13;
                }
                _loc_7.openTips = "isOpened";
                _loc_3.push(_loc_7);
                _loc_5++;
            }
            _loc_5 = _loc_4.length;
            while (_loc_5 < 6)
            {
                
                _loc_7 = new ToolTipStoneData();
                _loc_7.isLocked = true;
                _loc_7.itemData = null;
                _loc_3.push(_loc_7);
                switch(_loc_5 + 1)
                {
                    case 1:
                    {
                        _loc_14 = Language.getStringByParam(20885, "56");
                        break;
                    }
                    case 2:
                    {
                        _loc_14 = Language.getStringByParam(20885, "56");
                        break;
                    }
                    case 3:
                    {
                        _loc_14 = Language.getStringByParam(20885, "80");
                        break;
                    }
                    case 4:
                    {
                        _loc_14 = Language.getStringByParam(20885, "100");
                        break;
                    }
                    case 5:
                    {
                        _loc_14 = Language.getStringByParam(20885, "110");
                        break;
                    }
                    case 6:
                    {
                        _loc_14 = Language.getStringByParam(20885, "120");
                        break;
                    }
                    default:
                    {
                        break;
                    }
                }
                _loc_7.openTips = _loc_14;
                _loc_5++;
            }
            return _loc_3;
        }// end function

        public static function isRoleEquip(param1:ItemData) : Boolean
        {
            var _loc_2:* = Cache.instance.pack.packRolePackCache.getEquipByType(param1.itemInfo.type);
            if (_loc_2 && _loc_2.uid == param1.uid)
            {
                return true;
            }
            return false;
        }// end function

        public static function getEquipmentSuitData(param1:int, param2:int, param3:int = -1) : EquipmentSuitData
        {
            var _loc_10:int = 0;
            var _loc_11:AttributeData = null;
            var _loc_12:ItemData = null;
            var _loc_13:AttributeData = null;
            var _loc_14:Array = null;
            var _loc_15:int = 0;
            var _loc_16:TSkill = null;
            var _loc_4:* = new EquipmentSuitData();
            var _loc_5:* = ItemConfig.instance.getSuitById(param1);
            if (_loc_5 == null)
            {
                return null;
            }
            _loc_4.name = _loc_5.name;
            _loc_4.color = -1;
            var _loc_6:* = _loc_5.type.split("#");
            var _loc_7:int = 0;
            while (_loc_7 < _loc_6.length)
            {
                
                _loc_10 = parseInt(_loc_6[_loc_7]);
                _loc_11 = new AttributeData();
                _loc_11.value = _loc_10;
                _loc_11.name = GameDefConfig.instance.getEquipName(_loc_10);
                _loc_12 = Cache.instance.pack.packRolePackCache.getEquipByType(_loc_10);
                if (_loc_12 != null && (_loc_12.itemInfo as ItemEquipInfo).suitId == param1)
                {
                    _loc_11.type = 1;
                    _loc_4.color = _loc_12.itemInfo.color;
                }
                else
                {
                    _loc_11.type = 0;
                }
                _loc_4.parts.push(_loc_11);
                _loc_7++;
            }
            if (param3 > 0 && _loc_4.color < 0)
            {
                _loc_4.color = param3;
            }
            var _loc_8:* = _loc_5.attribute.split("&");
            var _loc_9:* = Cache.instance.role.getSuitNums(param1);
            _loc_7 = 0;
            while (_loc_7 < _loc_8.length)
            {
                
                if (_loc_8[_loc_7] == null || _loc_8[_loc_7] == "")
                {
                }
                else
                {
                    _loc_13 = new AttributeData();
                    _loc_14 = String(_loc_8[_loc_7]).split("#");
                    _loc_15 = int(_loc_14[0]);
                    _loc_10 = int(_loc_14[1]);
                    _loc_13.value = int(_loc_14[2]);
                    if (_loc_10 >= 0)
                    {
                        _loc_13.name = Language.getStringByParam(20886, _loc_15.toString(), AttributeUtil.getAttrNameByTypeValue(_loc_10, param2) + _loc_13.value);
                    }
                    else
                    {
                        _loc_16 = SkillConfig.instance.getInfoById(int(_loc_14[2]));
                        _loc_13.name = Language.getStringByParam(20887, _loc_15.toString(), _loc_16.name);
                    }
                    if (_loc_9[_loc_15])
                    {
                        _loc_13.type = 1;
                    }
                    else
                    {
                        _loc_13.type = 0;
                    }
                    _loc_4.attrs.push(_loc_13);
                }
                _loc_7++;
            }
            return _loc_4;
        }// end function

        public static function getCategoryByEquipType(param1:int) : int
        {
            var _loc_2:Array = [0, 9, 10, 11, 12];
            var _loc_3:Array = [1, 2, 3, 4, 5, 6, 7, 8];
            if (_loc_2.indexOf(param1) != -1)
            {
                return EEquipType._EEquipTypeAttack;
            }
            if (_loc_3.indexOf(param1) != -1)
            {
                return EEquipType._EEquipTypeDefense;
            }
            return -1;
        }// end function

        public static function getEquipBaseAttr(param1:ItemData) : Array
        {
            var _loc_4:String = null;
            var _loc_5:Object = null;
            var _loc_2:* = ItemConfig.instance.getConfig(param1.itemCode) as ItemEquipInfo;
            var _loc_3:Array = [];
            for each (_loc_4 in equipBaseAttrList)
            {
                
                if (_loc_2[_loc_4] != 0)
                {
                    _loc_5 = {};
                    _loc_5["attrName"] = _loc_4;
                    _loc_5["attrValue"] = _loc_2[_loc_4];
                    _loc_3.push(_loc_5);
                }
            }
            return _loc_3;
        }// end function

        public static function getEquipBaseCombat(param1:ItemData) : int
        {
            var _loc_4:String = null;
            var _loc_2:* = ItemConfig.instance.getConfig(param1.itemCode) as ItemEquipInfo;
            var _loc_3:Number = 0;
            for each (_loc_4 in equipBaseAttrList)
            {
                
                if (_loc_2[_loc_4] != 0)
                {
                    _loc_3 = _loc_3 + CombatUtil.getCombatValueByName(_loc_4, int(_loc_2[_loc_4]));
                }
            }
            return int(_loc_3);
        }// end function

        public static function isCanRefresh(param1:ItemData) : Boolean
        {
            if (param1 && param1.itemInfo.level >= 70 && param1.itemInfo.color >= ForgingConst.EquipColor_Zi)
            {
                return true;
            }
            return false;
        }// end function

        public static function isCanColorAdvance(param1:ItemData) : Boolean
        {
            if (param1 && param1.itemInfo.color >= ForgingConst.EquipColor_Cheng && (param1.itemInfo.level == 70 || param1.itemInfo.level == 50))
            {
                return true;
            }
            return false;
        }// end function

        public static function isCanStarAdvance(param1:ItemData) : Boolean
        {
            var _loc_2:int = 0;
            var _loc_3:int = 0;
            if (param1 && param1.itemInfo.level >= 50 && param1.itemInfo.color >= ForgingConst.EquipColor_Cheng)
            {
                _loc_2 = param1.extInfo ? (param1.extInfo.qual) : (0);
                _loc_3 = StarAdvanceUtil.getStarMaxLimit(param1);
                if (_loc_2 < _loc_3)
                {
                    return true;
                }
            }
            return false;
        }// end function

        public static function isRefreshed(param1:ItemData) : Boolean
        {
            var _loc_2:* = param1.extInfo;
            var _loc_3:int = 1;
            while (_loc_3 <= 6)
            {
                
                if (_loc_2["addStar" + _loc_3] != 0 && _loc_2["addStar" + _loc_3] != -1)
                {
                    return true;
                }
                _loc_3++;
            }
            return false;
        }// end function

        public static function isEmbedAvailable(param1:ItemData) : Boolean
        {
            var _loc_2:Array = null;
            var _loc_3:SJewelHoleInfo = null;
            if (param1)
            {
                _loc_2 = Cache.instance.forging.getGemDataByEquipType(param1.itemInfo.type);
                for each (_loc_3 in _loc_2)
                {
                    
                    if (_loc_3.itemCode == 0)
                    {
                        return true;
                    }
                }
            }
            return false;
        }// end function

        public static function isCanEmbed(param1:ItemData) : Boolean
        {
            if (param1 && param1.itemInfo.level >= 20 && param1.itemInfo.color >= ForgingConst.EquipColor_Zi)
            {
                return true;
            }
            return false;
        }// end function

        public static function isCanGuideEmbed(param1:ItemData) : Boolean
        {
            if (isCanEmbed(param1) && isEmbedAvailable(param1) && hasMatchGemInBackPack(param1))
            {
                return true;
            }
            return false;
        }// end function

        public static function getFirstEmbedGemIndex(param1:ItemData) : int
        {
            var _loc_3:String = null;
            if (param1 == null || param1.extInfo == null)
            {
                return -1;
            }
            var _loc_2:int = 1;
            while (_loc_2 <= 8)
            {
                
                _loc_3 = param1.extInfo["h" + _loc_2] as String;
                if (_loc_3 != null && _loc_3.length > 1)
                {
                    return (_loc_2 - 1);
                }
                _loc_2++;
            }
            return -1;
        }// end function

        public static function isCanGemUpgrade(param1:ItemData) : Boolean
        {
            if (param1 && param1.itemInfo.level >= 20 && param1.itemInfo.color >= ForgingConst.EquipColor_Zi)
            {
                return true;
            }
            return false;
        }// end function

        public static function getGemLevelHoleNum(param1:ItemData) : int
        {
            if (param1)
            {
                return GameDefConfig.instance.getEquipGemHoleNum(param1.itemInfo.level);
            }
            return 0;
        }// end function

        public static function getGemHoleNum(param1:ItemData) : int
        {
            var _loc_4:int = 0;
            var _loc_2:* = getGemLevelHoleNum(param1);
            var _loc_3:* = param1.extInfo.strengthen;
            if (_loc_3 >= 3 && _loc_3 < 6)
            {
                _loc_4 = 1;
            }
            else if (_loc_3 >= 6 && _loc_3 < 9)
            {
                _loc_4 = 2;
            }
            else if (_loc_3 >= 9)
            {
                _loc_4 = 3;
            }
            var _loc_5:* = _loc_2 + _loc_4;
            return _loc_5;
        }// end function

        public static function getEquipCombat(param1:ItemData, param2:int = 0, param3:ItemExInfo = null) : int
        {
            var _loc_5:String = null;
            var _loc_7:Vector.<AttributeData> = null;
            var _loc_8:AttributeData = null;
            var _loc_9:Vector.<AttributeData> = null;
            var _loc_10:int = 0;
            var _loc_4:* = new Dictionary();
            for each (_loc_5 in equipBaseAttrList)
            {
                
                _loc_4[_loc_5] = 0;
            }
            if (param1 && param1.extInfo || param3)
            {
                _loc_7 = getStrengthenAttr(param1, true, param3);
                for each (_loc_8 in _loc_7)
                {
                    
                    _loc_4[_loc_8.name] = _loc_4[_loc_8.name] + _loc_8.value;
                }
                _loc_9 = getEquipmentXiLianAttrs(param1, param3);
                for each (_loc_8 in _loc_9)
                {
                    
                    _loc_5 = GameDefConfig.instance.getItem("FightRoleAttribute", _loc_8.type).text;
                    _loc_5 = transFightRoleAttr(_loc_5);
                    _loc_10 = _loc_8.value;
                    _loc_4[_loc_5] = _loc_4[_loc_5] + _loc_10;
                }
            }
            else if (param1 && !param1.extInfo)
            {
                for each (_loc_5 in equipBaseAttrList)
                {
                    
                    _loc_10 = param1.itemInfo[_loc_5];
                    if (_loc_10 != 0)
                    {
                        _loc_4[_loc_5] = _loc_4[_loc_5] + _loc_10;
                    }
                }
            }
            var _loc_6:Number = 0;
            for (_loc_5 in _loc_4)
            {
                
                _loc_6 = _loc_6 + CombatUtil.getCombatValueByName(_loc_5, _loc_4[_loc_5]);
            }
            return int(_loc_6);
        }// end function

        public static function getGemCombat(param1:ItemData) : int
        {
            var _loc_2:String = null;
            var _loc_3:int = 0;
            var _loc_4:int = 0;
            var _loc_5:int = 0;
            if (param1)
            {
                _loc_2 = GameDefConfig.instance.getItem("FightRoleAttribute", param1.itemInfo.type).text;
                _loc_2 = transFightRoleAttr(_loc_2);
                _loc_3 = param1.itemInfo.effect;
                _loc_4 = param1.extInfo ? (param1.extInfo.currentStrengthen) : (0);
                _loc_5 = _loc_3 + _loc_4;
                return CombatUtil.getCombatValueByName(_loc_2, _loc_5);
            }
            return 0;
        }// end function

        public static function transFightRoleAttr(param1:String) : String
        {
            switch(param1)
            {
                case "maxLife":
                {
                    param1 = "life";
                    break;
                }
                case "maxMana":
                {
                    param1 = "mana";
                    break;
                }
                case "physicalDefense":
                {
                    param1 = "physDefense";
                    break;
                }
                case "magicalDefense":
                {
                    param1 = "magicDefense";
                    break;
                }
                default:
                {
                    break;
                }
            }
            return param1;
        }// end function

        public static function getStoneTypeName(param1:ItemData) : String
        {
            var _loc_2:String = null;
            if (param1.itemInfo.type == EEquip._EEquipWeapon)
            {
                if (param1.itemInfo.career == ECareer._ECareerWarrior || param1.itemInfo.career == ECareer._ECareerArcher)
                {
                    _loc_2 = Language.getString(20888);
                }
                else
                {
                    _loc_2 = Language.getString(20889);
                }
            }
            else
            {
                _loc_2 = StoneNames[param1.itemInfo.type] as String;
            }
            return _loc_2;
        }// end function

        public static function isStrengthened(param1:ItemData) : Boolean
        {
            if (param1.extInfo)
            {
                if (param1.extInfo.strengthen == 0 && param1.extInfo.currentStrengthen == 0)
                {
                    return false;
                }
                return true;
            }
            return false;
        }// end function

        public static function hasMatchGemInBackPack(param1:ItemData) : ItemData
        {
            var _loc_2:Array = null;
            var _loc_3:int = 0;
            var _loc_4:ItemData = null;
            if (param1)
            {
                _loc_2 = Cache.instance.pack.backPackCache.getGemByType();
                _loc_3 = EquipJewelMatchConfig.instance.getInfoByType(param1.itemInfo.type).jeweltype;
                for each (_loc_4 in _loc_2)
                {
                    
                    if (_loc_4.itemInfo.type == _loc_3)
                    {
                        return _loc_4;
                    }
                }
            }
            return null;
        }// end function

        public static function getEquipGemData(param1:ItemData) : Array
        {
            var _loc_5:EquipRecommendGemData = null;
            var _loc_6:TEquipJewelMatch = null;
            var _loc_7:ItemData = null;
            var _loc_2:Array = [];
            var _loc_3:* = param1.extInfo;
            var _loc_4:int = 1;
            while (_loc_4 <= 8)
            {
                
                if (_loc_3["h" + _loc_4] && _loc_3["h" + _loc_4] != "0")
                {
                    _loc_5 = new EquipRecommendGemData();
                    _loc_6 = EquipJewelMatchConfig.instance.getInfoByType(param1.itemInfo.type);
                    _loc_5.equipData = param1;
                    _loc_5.gemHoleIndex = _loc_4;
                    _loc_5.gemItemCode = int(_loc_3["h" + _loc_4].split("#")[0]);
                    _loc_5.gemType = _loc_6.jeweltype;
                    _loc_5.gemName = _loc_6.desc + Language.getString(20890);
                    _loc_7 = new ItemData(int(_loc_3["h" + _loc_4].split("#")[0]));
                    _loc_5.gemData = _loc_7;
                    _loc_5.recommendType = BestConst.RecommendType_GemStreng;
                    _loc_2.push(_loc_5);
                }
                _loc_4++;
            }
            return _loc_2;
        }// end function

        public static function getGemMatchedEquip(param1:ItemData) : ItemData
        {
            var _loc_4:ItemData = null;
            var _loc_5:ItemData = null;
            var _loc_6:ItemData = null;
            var _loc_2:* = param1.itemInfo.type;
            var _loc_3:* = EquipJewelMatchConfig.instance.getEquipTypeByJewelType(_loc_2);
            if (_loc_3 && _loc_3.length == 1)
            {
                _loc_4 = Cache.instance.pack.packRolePackCache.getEquipByType(_loc_3[0]);
            }
            else
            {
                _loc_5 = Cache.instance.pack.packRolePackCache.getEquipByType(_loc_3[0]);
                _loc_6 = Cache.instance.pack.packRolePackCache.getEquipByType(_loc_3[1]);
                if (_loc_5 && _loc_6)
                {
                    if (isEmbedAvailable(_loc_5) && isEmbedAvailable(_loc_6))
                    {
                        _loc_4 = _loc_5.itemInfo.type > _loc_6.itemInfo.type ? (_loc_6) : (_loc_5);
                    }
                    else if (!isEmbedAvailable(_loc_5) && !isEmbedAvailable(_loc_6))
                    {
                        _loc_4 = getGemMatchedEquip2(param1, _loc_5, _loc_6);
                    }
                    else
                    {
                        _loc_4 = isEmbedAvailable(_loc_5) == true ? (_loc_5) : (_loc_6);
                    }
                }
                else
                {
                    _loc_4 = _loc_5 == null ? (_loc_6) : (_loc_5);
                }
            }
            return _loc_4;
        }// end function

        private static function getGemMatchedEquip2(param1:ItemData, param2:ItemData, param3:ItemData) : ItemData
        {
            var _loc_4:ItemData = null;
            if (hasLowerLevelGem(param1, param2) && hasLowerLevelGem(param1, param3))
            {
                _loc_4 = param2.itemInfo.type > param3.itemInfo.type ? (param3) : (param2);
            }
            else if (!hasLowerLevelGem(param1, param2) && !hasLowerLevelGem(param1, param3))
            {
                _loc_4 = param2.itemInfo.type > param3.itemInfo.type ? (param3) : (param2);
            }
            else
            {
                _loc_4 = hasLowerLevelGem(param1, param2) == true ? (param2) : (param3);
            }
            return _loc_4;
        }// end function

        private static function hasLowerLevelGem(param1:ItemData, param2:ItemData) : Boolean
        {
            var _loc_5:int = 0;
            var _loc_6:ItemData = null;
            var _loc_7:int = 0;
            var _loc_3:* = param1.extInfo != null ? (param1.extInfo.jewelexper) : (0);
            var _loc_4:int = 1;
            while (_loc_4 <= 8)
            {
                
                if (param2.extInfo["h" + _loc_4] && param2.extInfo["h" + _loc_4] != "0")
                {
                    _loc_5 = int(param2.extInfo["h" + _loc_4].split("#")[0]);
                    _loc_6 = new ItemData(_loc_5);
                    _loc_7 = int(param2.extInfo["h" + _loc_4].split("#")[1]);
                    if (_loc_6.itemInfo.itemLevel < param1.itemInfo.itemLevel)
                    {
                        return true;
                    }
                }
                _loc_4++;
            }
            return false;
        }// end function

        public static function isNeedAroundEffect(param1:ItemData) : Boolean
        {
            if (param1 && param1.itemInfo && param1.itemInfo.category == EProp._EPropEquip && param1.extInfo && param1.extInfo.strengthen >= 6)
            {
                return true;
            }
            return false;
        }// end function

        public static function isEquipFashion(param1:ItemData) : Boolean
        {
            if (param1 == null || param1.itemInfo == null)
            {
                return false;
            }
            return param1.itemInfo.type >= EEquip._EEquipFashion;
        }// end function

        public static function compareStrengLevel(param1:ItemData, param2:ItemData) : int
        {
            var _loc_3:int = 0;
            if (param1.extInfo.strengthen > param2.extInfo.strengthen)
            {
                _loc_3 = 1;
            }
            else if (param1.extInfo.strengthen < param2.extInfo.strengthen)
            {
                _loc_3 = -1;
            }
            else if (param1.extInfo.currentStrengthen > param2.extInfo.currentStrengthen)
            {
                _loc_3 = 1;
            }
            else if (param1.extInfo.currentStrengthen < param2.extInfo.currentStrengthen)
            {
                _loc_3 = -1;
            }
            else
            {
                _loc_3 = 0;
            }
            return _loc_3;
        }// end function

        public static function compareStrengLevel2(param1:ItemData, param2:ItemData) : int
        {
            var _loc_3:int = 0;
            if (param1.extInfo.strengthen > param2.extInfo.strengthen)
            {
                _loc_3 = 1;
            }
            else if (param1.extInfo.strengthen < param2.extInfo.strengthen)
            {
                _loc_3 = -1;
            }
            else if (param1.extInfo.currentStrengthen > param2.extInfo.currentStrengthen)
            {
                _loc_3 = -1;
            }
            else if (param1.extInfo.currentStrengthen < param2.extInfo.currentStrengthen)
            {
                _loc_3 = 1;
            }
            else
            {
                _loc_3 = 0;
            }
            return _loc_3;
        }// end function

        public static function getEquipsByStrengLevel(param1:int) : Vector.<ItemData>
        {
            var _loc_4:ItemData = null;
            var _loc_2:* = Cache.instance.pack.packRolePackCache.getAllRoleEquips();
            var _loc_3:* = new Vector.<ItemData>;
            for each (_loc_4 in _loc_2)
            {
                
                if (_loc_4.extInfo && _loc_4.extInfo.strengthen >= param1)
                {
                    _loc_3.push(_loc_4);
                }
            }
            return _loc_3;
        }// end function

        public static function getStrengTargetLevel() : int
        {
            var _loc_1:ItemData = null;
            var _loc_2:* = Cache.instance.pack.packRolePackCache.getAllRoleEquips();
            if (_loc_2.length == 13)
            {
                _loc_1 = Cache.instance.pack.packRolePackCache.getLowestLevelEquip2(_loc_2);
                if (_loc_1 && _loc_1.extInfo.strengthen >= 5)
                {
                    return _loc_1.extInfo.strengthen;
                }
            }
            return 0;
        }// end function

        public static function getTotalGemCombatInRole() : int
        {
            var _loc_1:int = 0;
            var _loc_3:ItemData = null;
            var _loc_4:Array = null;
            var _loc_5:EquipRecommendGemData = null;
            var _loc_2:* = Cache.instance.pack.packRolePackCache.getAllRoleEquips();
            for each (_loc_3 in _loc_2)
            {
                
                _loc_4 = getEquipGemData(_loc_3);
                for each (_loc_5 in _loc_4)
                {
                    
                    _loc_1 = _loc_1 + getGemCombat(_loc_5.gemData);
                }
            }
            return _loc_1;
        }// end function

        public static function getEquipmentsByLevelAndSuitGroup(param1:int, param2:int) : Vector.<ItemData>
        {
            var _loc_5:ItemData = null;
            var _loc_3:* = Cache.instance.pack.packRolePackCache.getAllRoleEquips();
            var _loc_4:* = new Vector.<ItemData>;
            for each (_loc_5 in _loc_3)
            {
                
                if (_loc_5.itemInfo.level == param1 && (_loc_5.itemInfo as ItemEquipInfo).suitId == param2)
                {
                    _loc_4.push(_loc_5);
                }
            }
            return _loc_4;
        }// end function

        public static function isEquipCanStrengSucc(param1:ItemData, param2:Boolean = true) : Boolean
        {
            var _loc_3:* = param1.extInfo.strengthen + 1;
            var _loc_4:* = EquipStrengthenConfig.instance.getInfoByLevel(_loc_3);
            var _loc_5:* = _loc_4.mustSuccessAmount;
            var _loc_6:* = param1.extInfo.strengthenAmount;
            var _loc_7:* = _loc_4.consumeItemAmount;
            var _loc_8:* = _loc_4.consumeMoney;
            var _loc_9:* = (_loc_5 - _loc_6) * _loc_7;
            var _loc_10:* = new ItemData(_loc_4.consumeItemCode);
            var _loc_11:* = Cache.instance.pack.backPackCache.getItemCountByItemData(_loc_10);
            var _loc_12:* = (_loc_5 - _loc_6) * _loc_8;
            var _loc_13:* = Cache.instance.role.money.coin + Cache.instance.role.money.coinBind;
            if (param2 && _loc_11 >= _loc_9 && _loc_13 >= _loc_12)
            {
                return true;
            }
            if (!param2 && _loc_11 >= _loc_7 && _loc_13 >= _loc_8)
            {
                return true;
            }
            return false;
        }// end function

        public static function isGemCanStrengSucc(param1:ItemData, param2:SJewelHoleInfo) : Boolean
        {
            var _loc_3:* = new ItemData(param2.itemCode);
            var _loc_4:* = JewelUpdateConfig.instance.getInfoByColorAndLevel(_loc_3.itemInfo.color, (param2.strengthLevel + 1));
            var _loc_5:* = _loc_4.exp;
            var _loc_6:* = param2.exp;
            var _loc_7:* = _loc_5 - _loc_6;
            var _loc_8:* = new ItemData(ForgingConst.GemStrengItemCode);
            var _loc_9:* = _loc_8.itemInfo.effect;
            var _loc_10:* = _loc_7 / _loc_9;
            var _loc_11:* = Cache.instance.pack.backPackCache.getItemCountByItemData(_loc_8);
            var _loc_12:* = _loc_10 * ForgingConst.GemUpgradeFee;
            var _loc_13:* = Cache.instance.role.money.coin + Cache.instance.role.money.coinBind;
            if (_loc_11 >= _loc_10 && _loc_13 >= _loc_12)
            {
                return true;
            }
            return false;
        }// end function

    }
}
